package com.munhrasoft.dinamica.business.logic;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.munhrasoft.dinamica.business.entities.GrupoPassos;
import com.munhrasoft.dinamica.business.entities.PassosProcesso;

@Stateless
public class GrupoPassosEJB {

    @PersistenceContext(unitName = "dinamicaPU")
    private EntityManager em;

    @SuppressWarnings("unchecked")
    public List<GrupoPassos> pegaTodosGrupos() {
        Query query = em.createNamedQuery("findAllGPassos");
        return query.getResultList();
    }
    
    @SuppressWarnings("unchecked")
    public List<GrupoPassos> pegaTodosGruposPorTitulo() {
        Query query = em.createNamedQuery("findAllGPassosByTitulo");
        return query.getResultList();
    }
    
    @SuppressWarnings("unchecked")
    public List<GrupoPassos> findByTitulo(String titulo) {
        Query query = em.createNamedQuery("findByTitulo");
        query.setParameter("titulo", titulo);
        return query.getResultList();
    }
    
    @SuppressWarnings("unchecked")
    public List<PassosProcesso> findPassosByDescricao(String descricao) {
        Query query = em.createNamedQuery("findPassosByDescricao");
        query.setParameter("descricao", descricao);
        return query.getResultList();
    }

    public GrupoPassos createGrupoPassos(GrupoPassos grupoPassos) {
        em.persist(grupoPassos);
        return grupoPassos;
    }

    public GrupoPassos updateGrupoPassos(GrupoPassos grupoPassos) {
        return em.merge(grupoPassos);
    }

    public void removeGrupoPassos(GrupoPassos grupoPassos) {
        em.remove(em.merge(grupoPassos));
    }

    /**
     * Chamar este metodo quando for fazer a primeira carga
     */
    public void carregaGrupoPadrao() {

        // Passos das etapas
        final String[] passos_entrevista = { "DATA DA ENTREVISTA", "ENTREVISTADO POR", "ÚLTIMO DOCTO ENTREGUE" };
        final String[] passos_checklist = { "DATA DO CHECKLIST", "SALA PLATAFORMA", "AUTOMATIZADO", "MOTIVO" };
        final String[] passos_dossie = { "DATA DOSSIE COMERCIAL", "GIRET", "AGÊNCIA", "ASSINATURA COMERCIAL", "ENVIADA PARA CONFORMIDADE" };
        final String[] passos_incofdossie = { "DATA INCONFORMIDADE", "REGULARIZAÇÃO", "CONFORMIDADE" };
        final String[] passos_automatizado = { "SOLICITAÇÃO DE ENGENHARIA", "ACEITE", "PRÉVIA RECEBIDA", "LAUDO RECEBIDO",
            "PENDÊNCIAS LAUDO", "LAUDO REGULARIZADO" };
        final String[] passos_diferenciado = { "PROCESSO PRONTO", "ASSINATURA HABITACIONAL", "ENVIADO PARA SALA" };

        final String[] passos_aprovacao = { "ENTREGUE P/ APROVAÇÂO", "APROVAÇÂO HABITACIONAL", "REPROVAÇÂO/CONDICIONADO",
            "ASSINATURA COMPRADORES", "ASSINATURA VENDEDORES" };
        final String[] passos_fgts = { "SOLICITAÇÂO ENVIADA", "ERRO", "REENVIO", "FGTS RESSARCIDO" };
        final String[] passos_siopi = { "PROPOSTA NO SIOPI", "ENVIADO PARA GIRET" };
        final String[] passos_incofsiopi = { "INCONFORMIDADE", "REGULARIZAÇÂO", "CONFORMIDADE" };
        final String[] passos_escritura = { "ASSINATURA ESCRITURA" };

        HashMap<String, String[]> valores = new HashMap<String, String[]>();

        valores.put("ETAPA DE ENTREVISTA", passos_entrevista);
        valores.put("ETAPA DE CHECK-LIST", passos_checklist);
        valores.put("DOSSIÊCOMERCIAL", passos_dossie);
        valores.put("INCONFORMIDADE D. COMERCIAL", passos_incofdossie);
        valores.put("HAB - MODELO AUTOMATIZADO", passos_automatizado);
        valores.put("HAB - MODELO DIFERENCIADO", passos_diferenciado);
        valores.put("ETAPA DE APROVAÇÂO", passos_aprovacao);
        valores.put("FGTS", passos_fgts);
        valores.put("ETAPA SIOPI", passos_siopi);
        valores.put("INCONFORMIDADE SIOPI", passos_incofsiopi);
        valores.put("ESCRITURA", passos_escritura);
        
        HashMap<String, Integer> sequencia = new HashMap<String, Integer>();
        
        sequencia.put("ETAPA DE ENTREVISTA", 1);
        sequencia.put("ETAPA DE CHECK-LIST", 2);
        sequencia.put("DOSSIÊCOMERCIAL", 3);
        sequencia.put("INCONFORMIDADE D. COMERCIAL", 4);
        sequencia.put("HAB - MODELO AUTOMATIZADO", 5);
        sequencia.put("HAB - MODELO DIFERENCIADO", 6);
        sequencia.put("ETAPA DE APROVAÇÂO", 7);
        sequencia.put("FGTS", 8);
        sequencia.put("ETAPA SIOPI", 9);
        sequencia.put("INCONFORMIDADE SIOPI", 10);
        sequencia.put("ESCRITURA", 11);
        
        for (String grupoKeys : valores.keySet()) {

            GrupoPassos grupo = new GrupoPassos();
            grupo.setTitulo(grupoKeys);
            grupo.setPassos(new ArrayList<PassosProcesso>());

            for (int i = 0; i < valores.get(grupoKeys).length; i++) {
                PassosProcesso passos = new PassosProcesso();
                passos.setDescricao(valores.get(grupoKeys)[i]);
                grupo.getPassos().add(passos);
            }

            grupo.setOrdem(sequencia.get(grupoKeys));
            createGrupoPassos(grupo);

        }
    }

}
